#ifndef __LYNX_AUDIO_READER_SINE_C_HPP_INCLUDED__
#define __LYNX_AUDIO_READER_SINE_C_HPP_INCLUDED__

#include "LynxAudioReader.hpp"
#include <MythMath.hpp>

namespace Lynx
{
namespace Audio
{

class AudioReaderMonoSine_C : public AudioReader
{
public:
    AudioReaderMonoSine_C();

    virtual ~AudioReaderMonoSine_C();

    virtual AudioFormat get_audio_format(void) const;

    virtual bool set_position(uint32_t pos);

    virtual bool is_random_access(void) const;

    virtual uint32_t read_samples(void *buffer, uint32_t count);

    virtual uint32_t get_sample_count(void) const;

private:
    uint32_t mSize;
    uint16_t *mSamples;
};

class AudioReaderLoaderMonoSine_C : public AudioReaderLoader
{
public:
    AudioReaderLoaderMonoSine_C();

    virtual ~AudioReaderLoaderMonoSine_C();

    virtual bool is_loadable_extension(const std::string &file_name) const;

    virtual AudioReader *create_audio_reader(Myth::Stream::Input *input);

private:
    AudioReader *mReader;
};

class AudioReaderStereoSine_C : public AudioReader
{
public:
    AudioReaderStereoSine_C();

    virtual ~AudioReaderStereoSine_C();

    virtual AudioFormat get_audio_format(void) const;

    virtual bool set_position(uint32_t pos);

    virtual bool is_random_access(void) const;

    virtual uint32_t read_samples(void *buffer, uint32_t count);

    virtual uint32_t get_sample_count(void) const;

private:
    uint32_t mSize;
    uint16_t *mSamples;
};

class AudioReaderLoaderStereoSine_C : public AudioReaderLoader
{
public:
    AudioReaderLoaderStereoSine_C();

    virtual ~AudioReaderLoaderStereoSine_C();

    virtual bool is_loadable_extension(const std::string &file_name) const;

    virtual AudioReader *create_audio_reader(Myth::Stream::Input *input);

private:
    AudioReader *mReader;
};

} // namespace Audio
} // namespace Lynx

#endif // __LYNX_AUDIO_READER_SINE_C_HPP_INCLUDED__


